
std::piecewise_construct:
	.zero	1
.LC0:
	.string	"A::b()"

A::b():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	lea	rsi, .LC0[rip]
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	mov	rdi, rdx
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC1:
	.string	"B::b()"

B::b():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	lea	rsi, .LC1[rip]
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	mov	rdi, rdx
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC2:
	.string	"B::c()"

B::c():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	lea	rsi, .LC2[rip]
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	mov	rdi, rdx
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC3:
	.string	"B::d()"

B::d():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	lea	rsi, .LC3[rip]
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	mov	rdi, rdx
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC4:
	.string	"C::a()"

C::a():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	lea	rsi, .LC4[rip]
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	mov	rdi, rdx
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret

non-virtual thunk to C::a():
	sub	rdi, 8
	jmp	.LTHUNK0
.LC5:
	.string	"C::c()"

C::c():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	lea	rsi, .LC5[rip]
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	mov	rdi, rdx
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC6:
	.string	"C::d()"

C::d():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	lea	rsi, .LC6[rip]
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	mov	rdi, rdx
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC7:
	.string	"D::c()"

D::c():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 16
	mov	QWORD PTR -8[rbp], rdi
	lea	rsi, .LC7[rip]
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	mov	rdx, rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	mov	rdi, rdx
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret

test0():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 80
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	lea	rax, vtable for C[rip+16]
	mov	QWORD PTR -48[rbp], rax
	lea	rax, vtable for C[rip+56]
	mov	QWORD PTR -40[rbp], rax
	lea	rax, -48[rbp]
	mov	rdi, rax
	call	C::a()
	lea	rax, -48[rbp]
	mov	rdi, rax
	call	C::c()
	lea	rax, -48[rbp]
	mov	rdi, rax
	call	C::d()
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, -48[rbp]
	mov	QWORD PTR -80[rbp], rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR [rax]
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 8
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 16
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, -48[rbp]
	add	rax, 8
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR [rax]
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -72[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 8
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -72[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	B::c()
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	B::d()
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, -48[rbp]
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR [rax]
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -64[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 16
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -64[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rdi, rax
	call	C::d()
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, vtable for D[rip+16]
	mov	QWORD PTR -32[rbp], rax
	lea	rax, vtable for D[rip+56]
	mov	QWORD PTR -24[rbp], rax
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	C::a()
	lea	rax, -32[rbp]
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR [rax]
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -56[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	D::c()
	mov	rax, QWORD PTR -56[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 16
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -56[rbp]
	mov	rdi, rdx
	call	rax
	nop
	mov	rax, QWORD PTR -8[rbp]
	xor	rax, QWORD PTR fs:40
	je	.L10
	call	__stack_chk_fail@PLT
.L10:
	leave
	ret

test1():
	push	rbp
	mov	rbp, rsp
	sub	rsp, 96
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	lea	rax, vtable for C[rip+16]
	mov	QWORD PTR -48[rbp], rax
	lea	rax, vtable for C[rip+56]
	mov	QWORD PTR -40[rbp], rax
	lea	rax, -48[rbp]
	mov	rdi, rax
	call	C::a()
	lea	rax, -48[rbp]
	add	rax, 8
	mov	rdi, rax
	call	B::c()
	lea	rax, -48[rbp]
	mov	rdi, rax
	call	C::c()
	lea	rax, -48[rbp]
	mov	rdi, rax
	call	C::d()
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, -48[rbp]
	mov	QWORD PTR -88[rbp], rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR [rax]
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -88[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 8
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -88[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -88[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 16
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -88[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, -48[rbp]
	add	rax, 8
	mov	QWORD PTR -80[rbp], rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR [rax]
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 8
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -80[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -80[rbp]
	mov	rdi, rax
	call	B::c()
	mov	rax, QWORD PTR -80[rbp]
	mov	rdi, rax
	call	B::d()
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, -48[rbp]
	mov	QWORD PTR -72[rbp], rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR [rax]
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -72[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 16
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -72[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR -72[rbp]
	mov	rdi, rax
	call	C::d()
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, vtable for D[rip+16]
	mov	QWORD PTR -32[rbp], rax
	lea	rax, vtable for D[rip+56]
	mov	QWORD PTR -24[rbp], rax
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	C::a()
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, -32[rbp]
	mov	QWORD PTR -64[rbp], rax
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR [rax]
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -64[rbp]
	mov	rdi, rdx
	call	rax
	mov	rax, QWORD PTR std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL[rip]
	mov	rsi, rax
	lea	rdi, std::cout[rip]
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	lea	rax, -32[rbp]
	mov	rdi, rax
	call	D::c()
	mov	rax, QWORD PTR -64[rbp]
	mov	rax, QWORD PTR [rax]
	add	rax, 16
	mov	rax, QWORD PTR [rax]
	mov	rdx, QWORD PTR -64[rbp]
	mov	rdi, rdx
	call	rax
	lea	rax, -32[rbp]
	add	rax, 8
	mov	QWORD PTR -56[rbp], rax
	mov	rax, QWORD PTR -56[rbp]
	mov	rdi, rax
	call	B::c()
	nop
	mov	rax, QWORD PTR -8[rbp]
	xor	rax, QWORD PTR fs:40
	je	.L12
	call	__stack_chk_fail@PLT
.L12:
	leave
	ret

main:
	push	rbp
	mov	rbp, rsp
	call	test1()
	mov	eax, 0
	pop	rbp
	ret

vtable for D:
	.quad	0
	.quad	typeinfo for D
	.quad	C::a()
	.quad	A::b()
	.quad	D::c()
	.quad	-8
	.quad	typeinfo for D
	.quad	non-virtual thunk to C::a()
	.quad	B::b()

vtable for C:
	.quad	0
	.quad	typeinfo for C
	.quad	C::a()
	.quad	A::b()
	.quad	C::c()
	.quad	-8
	.quad	typeinfo for C
	.quad	non-virtual thunk to C::a()
	.quad	B::b()

typeinfo for D:
	.quad	vtable for __cxxabiv1::__si_class_type_info+16
	.quad	typeinfo name for D
	.quad	typeinfo for C

typeinfo name for D:
	.string	"1D"

typeinfo for C:
	.quad	vtable for __cxxabiv1::__vmi_class_type_info+16
	.quad	typeinfo name for C
	.long	0
	.long	2
	.quad	typeinfo for A
	.quad	2
	.quad	typeinfo for B
	.quad	2050

typeinfo name for C:
	.string	"1C"

typeinfo for B:
	.quad	vtable for __cxxabiv1::__class_type_info+16
	.quad	typeinfo name for B

typeinfo name for B:
	.string	"1B"

typeinfo for A:
	.quad	vtable for __cxxabiv1::__class_type_info+16
	.quad	typeinfo name for A

typeinfo name for A:
	.string	"1A"

__static_initialization_and_destruction_0(int, int):
	push	rbp
	mov	rbp, rsp
	sub	rsp, 16
	mov	DWORD PTR -4[rbp], edi
	mov	DWORD PTR -8[rbp], esi
	cmp	DWORD PTR -4[rbp], 1
	jne	.L17
	cmp	DWORD PTR -8[rbp], 65535
	jne	.L17
	lea	rdi, std::__ioinit[rip]
	call	std::ios_base::Init::Init()@PLT
	lea	rdx, __dso_handle[rip]
	lea	rsi, std::__ioinit[rip]
	mov	rax, QWORD PTR std::ios_base::Init::~Init()@GOTPCREL[rip]
	mov	rdi, rax
	call	__cxa_atexit@PLT
.L17:
	nop
	leave
	ret

_GLOBAL__sub_I__Z5test0v:
	push	rbp
	mov	rbp, rsp
	mov	esi, 65535
	mov	edi, 1
	call	__static_initialization_and_destruction_0(int, int)
	pop	rbp
	ret
	.quad	_GLOBAL__sub_I__Z5test0v